package com.nkzy.domain.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// 统一返回结果类型：类中有属性、方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    //三个属性：状态码，提示信息，数据，都使用private表示对属性私有化，封装性
    //面向对象编程特性：封装性，继承性，多态性
    //构造方法的作用：创建对象，初始化对象，完成对象的创建
    //构造方法：无参构造、有参构造、默认无参构造，无参构造方法，有参构造方法称为方法的重载
    //方法重载：同一个类中，方法名相同，参数个数不同，或采纳数类型不同，
    //类是抽象的，是对现实世界的一个抽象，比如：用户、订单、商品、地址
    //用类创建出的对象，称为对象，对象是具体的
    private Integer code;//状态码,此处可以使用int类型，也可以使用Integer类型
    private String msg;//提示信息
    private Object data;//返回数据
    //@Override：重写父类方法，java所有类都有Object类，所以类都继承了Object类
    //java数据类型：基本数据类型（简单数据类型）、引用数据类型（复杂数据类型）。
    //基本数据类型：int、char、boolean、float、double、long、byte、short
    //引用类型：String、数组、类、接口、
    //引用类型的数据，一般都提供了一些方法，便于我们进行操作。
    //在定义类的属性时尽量使用引用数据类型，因为基本数据类型，存储的是值，而引用数据类型，提供了很多方法，我们后续操作时可以直接使用。
    //为了后续操作方便，在类中可以白那些几个静态的方法，方便使用
    //静态方法：不需要创建对象，直接使用类名.方法名（）调用
    //这个成功的方法一般用于保存、修改、删除
    public static Result success(){
        return new Result(200,"操作成功",null);
    }
    //静态方法：返回成功，并携带数据，用于查询
    public static Result success(Object data){
        return new Result(1,"操作成功",data);
    }
    //静态方法：返回失败，并携带信息
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
//    @Override
//    public String toString() {
//        return "Result{" +
//                "code='" + code + '\'' +
//                ", msg='" + msg + '\'' +
//                ", data=" + data +
//                '}';
//    }
//类中方法：构造方法、getter、setter、自定义方法，私有的属性外界不能访问，需要提供方法访问
    //构造方法：空参、有参、全参
    //1.空参构造方法
//    public Result() {
//    }
//
//    //2.有参构造方法
//    public Result(String code) {
//        this.code = code;
//    }
//
//    public Result(String code, String msg) {
//        this.code = code;
//        this.msg = msg;
//    }
//
//    public Result(String code, String msg, Object data) {
//        this.code = code;
//        this.msg = msg;
//        this.data = data;
//    }
//    //3.getter、setter:封装性，对属性私有化，外界不能直接访问，需要提供方法访问,public
//
//    public String getCode() {
//        return code;
//    }
//
//    public String getMsg() {
//        return msg;
//    }
//
//    public Object getData() {
//        return data;
//    }
//
//    public void setCode(String code) {
//        this.code = code;
//    }
//
//    public void setMsg(String msg) {
//        this.msg = msg;
//    }
//
//    public void setData(Object data) {
//        this.data = data;
//    }
//    //自定义方法：根据状态码，设置提示信息
//    public void eat(){
//        System.out.println("eat.....");
//
//    }
    //4.toString():输出对象信息：如果没有这个方法，对象输出信息的时候不会输出对象信息，而是输出对象的地址

//    @Override
//    public String toString() {
//        return "Result{" +
//                "code='" + code + '\'' +
//                ", msg='" + msg + '\'' +
//                ", data=" + data +
//                '}';
//    }
}
